package com.example.myapplication.banner

import android.content.Context
import android.media.MediaPlayer
import android.util.AttributeSet
import android.widget.VideoView

class CustomFillVideoView @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
) : VideoView(context, attrs, defStyleAttr) {

    // 填充模式枚举
    enum class FillMode {
        FILL_STRETCH,   // 拉伸填充（可能变形）
        FILL_CROP       // 比例填充（无变形，裁剪超出部分）
    }

    var fillMode: FillMode = FillMode.FILL_STRETCH
        set(value) {
            field = value
            requestLayout()
        }

    private var videoWidth: Int = 0
    private var videoHeight: Int = 0

    init {
        initVideoListener()
    }

    private fun initVideoListener() {
        setOnPreparedListener { mp ->
            // 获取视频原始尺寸
            videoWidth = mp.videoWidth
            videoHeight = mp.videoHeight
            // 视频尺寸获取后重新测量布局
            requestLayout()
        }

        // 添加错误监听
        setOnErrorListener { _, what, extra ->
            // 可以在这里处理视频播放错误
            true
        }
    }

    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        // 获取父容器的可用宽高
        val parentWidth = MeasureSpec.getSize(widthMeasureSpec)
        val parentHeight = MeasureSpec.getSize(heightMeasureSpec)

        // 若未获取到视频尺寸（未准备完成），默认使用父容器尺寸
        if (videoWidth == 0 || videoHeight == 0) {
            setMeasuredDimension(parentWidth, parentHeight)
            return
        }

        // 根据填充模式计算最终视图尺寸
        var finalWidth = parentWidth
        var finalHeight = parentHeight

        when (fillMode) {
            FillMode.FILL_STRETCH -> {
                // 拉伸填充：直接使用父容器尺寸（视频会变形）
            }
            FillMode.FILL_CROP -> {
                // 比例填充：计算缩放比例，确保无变形（可能裁剪）
                val videoRatio = videoWidth.toFloat() / videoHeight
                val parentRatio = parentWidth.toFloat() / parentHeight

                if (videoRatio > parentRatio) {
                    // 视频更宽，按宽度缩放，高度超出部分裁剪
                    finalHeight = (parentWidth / videoRatio).toInt()
                } else {
                    // 视频更高，按高度缩放，宽度超出部分裁剪
                    finalWidth = (parentHeight * videoRatio).toInt()
                }
            }
        }

        // 设置最终测量尺寸
        setMeasuredDimension(finalWidth, finalHeight)
    }

    // 重写此方法以确保全屏显示
    override fun setVideoPath(path: String) {
        super.setVideoPath(path)
        // 重置视频尺寸信息
        videoWidth = 0
        videoHeight = 0
    }
}
